Telegram Group & Telegram Channel
🔍 Как валидировать входные данные

Проверять данные вручную через if-ы — больно, скучно и не масштабируется.
Bean Validation (javax.validation) позволяет валидировать красиво и декларативно, не превращая код в болото.

1️⃣ Добавляем зависимости

implementation("org.springframework.boot:spring-boot-starter-validation")

ИЛИ

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>


2️⃣ Аннотации в DTO
public class UserRequest {

@NotBlank(message = "Имя не должно быть пустым")
private String name;

@Email(message = "Некорректный email")
private String email;

@Min(value = 18, message = "Возраст должен быть 18+")
private int age;

// геттеры и сеттеры
}


3️⃣ Включаем валидацию в контроллере
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody UserRequest request) {
userService.save(request);
return ResponseEntity.ok().build();
}


Без @Valid перед DTO ничего не сработает.

4️⃣ Глобальный обработчик ошибок
@RestControllerAdvice
public class ExceptionHandlerController {

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> handleValidationErrors(MethodArgumentNotValidException ex) {
List<String> errors = ex.getBindingResult().getFieldErrors().stream()
.map(err -> err.getField() + ": " + err.getDefaultMessage())
.toList();

return ResponseEntity.badRequest().body(errors);
}
}


Теперь ошибки приходят красиво и читаемо в JSON.

5️⃣ Кастомные валидаторы

Если нужно что-то особенное — например, проверка страны:
@Constraint(validatedBy = CountryValidator.class)
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidCountry {
String message() default "Страна не поддерживается";
}

public class CountryValidator implements ConstraintValidator<ValidCountry, String> {
private final List<String> allowed = List.of("RU", "US", "DE");

public boolean isValid(String value, ConstraintValidatorContext ctx) {
return allowed.contains(value);
}
}


💬 Всё ещё пишете if (dto.getName() == null)?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM



tg-me.com/javaproglib/6552
Create:
Last Update:

🔍 Как валидировать входные данные

Проверять данные вручную через if-ы — больно, скучно и не масштабируется.
Bean Validation (javax.validation) позволяет валидировать красиво и декларативно, не превращая код в болото.

1️⃣ Добавляем зависимости

implementation("org.springframework.boot:spring-boot-starter-validation")

ИЛИ

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>


2️⃣ Аннотации в DTO
public class UserRequest {

@NotBlank(message = "Имя не должно быть пустым")
private String name;

@Email(message = "Некорректный email")
private String email;

@Min(value = 18, message = "Возраст должен быть 18+")
private int age;

// геттеры и сеттеры
}


3️⃣ Включаем валидацию в контроллере
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody UserRequest request) {
userService.save(request);
return ResponseEntity.ok().build();
}


Без @Valid перед DTO ничего не сработает.

4️⃣ Глобальный обработчик ошибок
@RestControllerAdvice
public class ExceptionHandlerController {

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> handleValidationErrors(MethodArgumentNotValidException ex) {
List<String> errors = ex.getBindingResult().getFieldErrors().stream()
.map(err -> err.getField() + ": " + err.getDefaultMessage())
.toList();

return ResponseEntity.badRequest().body(errors);
}
}


Теперь ошибки приходят красиво и читаемо в JSON.

5️⃣ Кастомные валидаторы

Если нужно что-то особенное — например, проверка страны:
@Constraint(validatedBy = CountryValidator.class)
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidCountry {
String message() default "Страна не поддерживается";
}

public class CountryValidator implements ConstraintValidator<ValidCountry, String> {
private final List<String> allowed = List.of("RU", "US", "DE");

public boolean isValid(String value, ConstraintValidatorContext ctx) {
return allowed.contains(value);
}
}


💬 Всё ещё пишете if (dto.getName() == null)?

🐸 Библиотека джависта #буст

BY Библиотека джависта | Java, Spring, Maven, Hibernate




Share with your friend now:
tg-me.com/javaproglib/6552

View MORE
Open in Telegram


Библиотека джависта | Java Spring Maven Hibernate Telegram | DID YOU KNOW?

Date: |

How to Use Bitcoin?

n the U.S. people generally use Bitcoin as an alternative investment, helping diversify a portfolio apart from stocks and bonds. You can also use Bitcoin to make purchases, but the number of vendors that accept the cryptocurrency is still limited. Big companies that accept Bitcoin include Overstock, AT&T and Twitch. You may also find that some small local retailers or certain websites take Bitcoin, but you’ll have to do some digging. That said, PayPal has announced that it will enable cryptocurrency as a funding source for purchases this year, financing purchases by automatically converting crypto holdings to fiat currency for users. “They have 346 million users and they’re connected to 26 million merchants,” says Spencer Montgomery, founder of Uinta Crypto Consulting. “It’s huge.”

Telegram hopes to raise $1bn with a convertible bond private placement

The super secure UAE-based Telegram messenger service, developed by Russian-born software icon Pavel Durov, is looking to raise $1bn through a bond placement to a limited number of investors from Russia, Europe, Asia and the Middle East, the Kommersant daily reported citing unnamed sources on February 18, 2021.The issue reportedly comprises exchange bonds that could be converted into equity in the messaging service that is currently 100% owned by Durov and his brother Nikolai.Kommersant reports that the price of the conversion would be at a 10% discount to a potential IPO should it happen within five years.The minimum bond placement is said to be set at $50mn, but could be lowered to $10mn. Five-year bonds could carry an annual coupon of 7-8%.

Библиотека джависта | Java Spring Maven Hibernate from vn


Telegram Библиотека джависта | Java, Spring, Maven, Hibernate
FROM USA